Virtual machines (VMs) running in host computers are actively managed to improve their overall performance. One example is live migration of VMs. VMs may undergo live migration from a busy server to an underutilized server to achieve load balancing across host computers. Live migration of VMs also may be carried out to enable machine maintenance.
Live migration of a VM involves copying the memory pages of the VM from a source machine to a destination machine, and this process can take several seconds or even minutes. In some implementations, this latency is hidden by using several iterations of pre-copy while the VM is still running. Pages that are modified during a pre-copy iteration are marked “dirty” and re-sent in the next pre-copy iteration. When the set of modified pages is sufficiently small after a pre-copy iteration, the VM is stunned at the source machine and, after the modified pages have been copied over, resumes execution at the destination machine.
The pre-copy iterations consume a lot of network bandwidth, and if the link between the source machine and the destination machine is a low bandwidth link, such as over the Internet between physically separate data centers, live migration can take a long time to complete. Some simple techniques have been employed to reduce the bandwidth consumption during live migration of VMs. For example, zero pages are not transmitted and instead recreated at the destination. Other techniques to reduce the bandwidth consumption during live migration of VMs have not been attractive because of their potential to adversely impact VM performance.